The present invention relates generally to computer system software development and maintenance. More particularly, the invention relates to a reconfiguration system for applying source code and data format modifications to a computer software system in an organized and automated fashion. The reconfiguration system has many uses in developing and maintaining complex software systems. It will be described herein with respect to the "Year 2000" problem.
The Year 2000 problem is a widespread problem that will affect most major computer systems throughout the world. Simply stated, the problem results from the inherent ambiguity of using two digits as an abbreviation for a four-digit year. Numerous solutions have been proposed to address the problem. In some applications a "windowed" approach has been proposed, in which a two-digit year above a certain number is treated as a year in the twenty-first century, and a two-digit year below that number is treated as a year in the twentieth century. Clearly, the windowed approach will not work in all applications. Thus in some systems the best solution is to expand the two-digit year into a four-digit year. Expanding the year is not a simple conversion process because any such change in the computer code or data may have avalanche-like effects upon other parts of the code or data.
The Year 2000 problem exemplifies the more fundamental problem of updating source code or file layouts in complex software systems. Calls by reference techniques, use of pointers and the linking of tables in relational databases can make it very difficult to effect software modifications. To illustrate, the Year 2000 problem deals primarily with dates. Thus field names and variable names containing the word "date" or data formatted as a "date" data type represent logical candidates for applying a windowing or expansion enhancement. However, members given entirely different names may be based, in part, upon "date" fields or variables. Thus these members may also need to be similarly enhanced (such as by windowing or expansion). These members may, in turn, supply data to still further members. Thus the enhancement of a "date" field in one member can readily have a geometrically increasing impact.
The present invention offers a tightly integrated solution to the general problem of effecting change in a complex software system. The reconfiguration engine copies or installs the original source code objects to a collection of working directories, where the installed objects are then analyzed. The analysis uses a lexicon of relevant key words to identify where at least some of the subject variables (e.g. date) are used. The lexicon is user-modifiable.
The reconfiguration engine constructs a repository, in the form of a data store into which key information about the source code and the change operations are recorded. Many of the other modules and subsystems of the reconfiguration engine access this repository to read information about the installed source code and/or to write information that will ultimately be used in the reconfiguration process.
The reconfiguration engine includes a tagging module or subsystem that generates keyword tags that are associated with the relevant variables being changed. These tags function as action codes that ultimately determine what type of change action is applied to the variable tagged. The action codes also record a confidence level associated with each tagging decision. Tags based on known keyword identity are assigned a high confidence level, whereas tags inferred by reference to other tags are assigned a lower confidence level. The tagging subsystem may operate in two modes, an interactive mode and a batch mode. The user may readily select between these two modes. In the interactive mode, each member identified by the tagging module is presented to the user for confirmation before applying the tag; in the batch mode, tags are applied to members that match entities in the lexicon without user confirmation.
Because it may not always be possible to identify all relevant members during the tagging process, the reconfiguration engine includes an impact analysis module or subsystem. This subsystem examines the installed source code at several levels ranging from a local level, examining fields whose values are based on known keyword fields, to a system wide level, examining data flow among installed components of the system, to identify other members that may need to be tagged. Appropriate tags with confidence factors are generated and these are stored in the repository. The impact analysis subsystem uses the tagged keywords of high confidence level to locate additional variables, fields and data objects that are of the same data type as the tagged keywords. These are also tagged and stored in the repository. Impact analysis insures that the entire source code and associated components of the system are thoroughly checked to identify members that will be affected by the change. The impact analysis subsystem generates a report, describing those source code objects that need further processing by the tagging subsystem.
Once all pertinent members have been tagged, the source change or code renovation module or subsystem is employed. This subsystem uses a master template to apply actual source code changes to the installed source code based on previously generated tags stored in the repository. The master templates are user-modifiable. They represent the precise changes that the source change subsystem applies to the installed source code.
The reconfiguration engine may also include a code generator that converts the tagged source code produced by the source change subsystem into fully updated source code, complete with all associated code components. The updated source code may then be compiled and substituted for the pre-modification executable code.
In addition to renovating source code, the reconfiguration system also will renovate the data stored by the system being reconfigured. An unload/reload or data renovation module or subsystem performs this function.
The reconfiguration engine of the invention enables a high level of automation and supports multiple software platforms. It will handle large volumes of code and data, even if distributed through multiple systems and across shared entities. The repository-based system allows work groups to share responsibilities or subdivide a large reconfiguration problem into different work-related tasks.
The reconfiguration process made possible by the invention is a unique hybrid of interactive (semi-automated) and batch (fully-automated). A step-by-step, iterative refinement allows high volumes of code to be managed with a high degree of rigor. The system provides an audit trail of all changes.
For a more complete understanding of the invention, its objects and advantages, reference may be had to the following specification and to the accompanying drawings.